﻿using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using System.Globalization;
using System.Linq;
using System.Text;

namespace VWPDestaqueAniversariante.VisualWebPart1
{
    public partial class VisualWebPart1UserControl : UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                //getDestaqueAniversarianteCaml();
                getDestaqueAniversariante();
                
        }

        /// <summary>
        /// 
        /// </summary>
        private void getDestaqueAniversarianteCaml()
        {
            SPSite mySite = SPContext.Current.Site;
            SPWeb myWeb = mySite.OpenWeb();
            SPList myUsuarios = myWeb.Lists["Usuário"];
            SPQuery query = new SPQuery();
            //DateTime agora = DateTime.Now;
            
           //     <And>
           //     <IsNotNull>
           //     <FieldRef Name='Data_x0020_nascimento' />
           //     </IsNotNull>


            CultureInfo mesExtension = new CultureInfo("pt-BR");
            DateTimeFormatInfo dtif = mesExtension.DateTimeFormat;
            int mes = DateTime.Now.Month;
            string msgHtml = string.Empty;
            string queryCaml = @"
                <Query>
                <Where>
                <Geq>
                <FieldRef Name='Data_x0020_nascimento' />
                <Value IncludeTimeValue='TRUE' Type='DateTime'>" + DateTime.Now.Month + @"</Value>
                </Geq>

           


                </Where>
                <OrderBy>
                    <FieldRef Name='Title' Ascending='True' />
                </OrderBy></Query>
                <RowLimit>3</RowLimit>
                ";

            query.Query = queryCaml;
            //query.ViewFields = "<FieldRef Name='Data nascimento' /><FieldRef Name='ID' /><FieldRef Name='Nome' />";

            var listaUsuario = myUsuarios.GetItems(query);

            msgHtml = "<div id=\"eventoMes" + mes + "\" style=\"display:none\">";
            msgHtml += "<br />";
            if (listaUsuario.Count > 0)
            {
                foreach (SPListItem itemUsuario in listaUsuario)
                {
                    if (!itemUsuario["Nome"].ToString().Contains("FAX"))
                    {
                        msgHtml += "<ul>";
                        msgHtml += itemUsuario["Data nascimento"].ToString() + "";
                        msgHtml += "</ul>";
                        msgHtml += "<ul>";
                        msgHtml += "<li><strong>";
                        msgHtml += Convert.ToDateTime(itemUsuario["Data nascimento"]).Day.ToString() + " de " + mesExtension.TextInfo.ToTitleCase(dtif.GetMonthName(Convert.ToInt32(mes)));
                        msgHtml += "</strong><span><a href=\"/Paginas/usuario.aspx?ID_Lista=" + itemUsuario["ID"] + "&strLetra=" + itemUsuario["Nome"].ToString().Substring(0, 1) + "\">" + itemUsuario["Nome"].ToString().ToUpper() + "</a></span>";
                        msgHtml += "</li>";
                        msgHtml += "</ul>";
                    }
                }
            }
            else
            {
                msgHtml += "<br>";
                msgHtml += "<p>Nenhum registro encontrado.</p>";
            }
            msgHtml += "</div>";
            //resultHtml.InnerHtml = Server.HtmlEncode(msgHtml);

        }

       

        private void getDestaqueAniversariante()
        {
            try
            {
                //DateTime agora = DateTime.Now;
                string dataHoje = DateTime.Now.ToShortDateString();
                DateTime dtHoje;
                DateTime.TryParse(dataHoje, out dtHoje);
                int mes = DateTime.Now.Month;
                SPSite mySite = SPContext.Current.Site;
                SPWeb myWeb = mySite.OpenWeb();
                SPList myUsuarios = myWeb.Lists["Usuário"];
                CultureInfo mesExtension = new CultureInfo("pt-BR");
                DateTimeFormatInfo dtif = mesExtension.DateTimeFormat;

                string msgHtml = string.Empty;

                //var resultUsuario = myUsuarios.Items.Cast<SPListItem>().Where(i => Convert.ToDateTime(i["Data nascimento"]).Month.Equals(mes)).OrderBy(i => Convert.ToDateTime(i["Data nascimento"]).Day).ToList();
                var resultUsuario = myUsuarios.Items.Cast<SPListItem>()
                    .Where(i => ConverterData(
                        i["Data nascimento"] == null ? DateTime.MinValue : Convert.ToDateTime(i["Data nascimento"].ToString())) >= dtHoje)

                        .OrderBy(i =>
                            i["Data nascimento"] == null ? DateTime.MinValue.Month : Convert.ToDateTime(i["Data nascimento"].ToString()).Month)
                            .ThenBy(i => i["Data nascimento"] == null ? DateTime.MinValue.Day : Convert.ToDateTime(i["Data nascimento"].ToString()).Day)
                            .Take(3)
                            .ToList();

                if (resultUsuario.Count > 0)
                {
                    msgHtml += "<br>";
                    msgHtml += "<ul>";
                    foreach (SPListItem itemUsuario in resultUsuario)
                    {

                        if (!itemUsuario["Nome"].ToString().Contains("FAX"))
                        {
                            msgHtml += "<li><strong>";
                            if (Convert.ToDateTime(itemUsuario["Data nascimento"]).Month > DateTime.Now.Month)
                            {
                                mes = Convert.ToInt32(Convert.ToDateTime(itemUsuario["Data nascimento"]).Month);
                               // mes = DateTime.Now.Month + 2;
                                msgHtml += Convert.ToDateTime(itemUsuario["Data nascimento"]).Day.ToString() + " de " + mesExtension.TextInfo.ToTitleCase(dtif.GetMonthName(Convert.ToInt32(mes)));
                                msgHtml += "</strong><span><a href=\"/Paginas/usuario.aspx?ID_Lista=" + itemUsuario["ID"] + "&strLetra=" + itemUsuario["Nome"].ToString().Substring(0, 1) + "\">" + itemUsuario["Nome"].ToString().ToUpper() + "</a></span>";
                                msgHtml += "</li>";
                            }
                            else
                            {
                                msgHtml += Convert.ToDateTime(itemUsuario["Data nascimento"]).Day.ToString() + " de " + mesExtension.TextInfo.ToTitleCase(dtif.GetMonthName(Convert.ToInt32(mes)));
                                msgHtml += "</strong><span><a href=\"/Paginas/usuario.aspx?ID_Lista=" + itemUsuario["ID"] + "&strLetra=" + itemUsuario["Nome"].ToString().Substring(0, 1) + "\">" + itemUsuario["Nome"].ToString().ToUpper() + "</a></span>";
                                msgHtml += "</li>";
                            }
                        }

                    }
                    msgHtml += "</ul>";
                }
                else
                {
                    msgHtml += "<br>";
                    msgHtml += "<p>Nenhum registro encontrado.</p>";
                }

                StringBuilder sb = new StringBuilder();
                sb.Append(msgHtml);

                divAniversariantes.Text = sb.ToString();
            }
            catch (Exception excep)
            {

            }
        }
        /// <summary>
        /// Método utilizado para convertir datas de diferentes anos a data do ano atual.
        /// Utilizado para realizar comparação entre datas, como por exemplo traçer os aniversarios
        /// de data atual e dos aniversarios futuros.
        /// </summary>
        /// <param name="dt">DateTime o qual será convertido a data do ano atual.</param>
        /// <returns>Retorna um DateTime com o ano atual.</returns>
        private DateTime ConverterData(DateTime dt)
        {
            string data = dt.Day + "/" + dt.Month;
            DateTime dtConvert;
            DateTime.TryParse(data, out dtConvert);
            return dtConvert;
        }
    }
}
